gusucode.com > 各种VC自绘控件源码程序 > 各种VC自绘控件源码/code/SkinControls(自绘MFC基本控件 )/SkinControls/SkinControls/SkinUIControl.cpp

    #include "StdAfx.h"
#include "SkinUIControl.h"
#include "SkinUIWnd.h"

CSkinUIControl::CSkinUIControl() : 
	m_bVisible(true),
		m_bEnabled(true),
		m_pParentWnd(NULL)
{
	m_rcItem.SetRect(0,0,0,0);
	m_Rgn.CreateRectRgn(0,0,0,0);
	m_crBk = RGB(255,255,255);
	m_pFont = new CFont;
	m_pFont->CreateFont(-12,0,0,0,400,0,0,0,134,3,2,1,2,TEXT("宋体"));
	m_uTextFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS;
}

CSkinUIControl::~CSkinUIControl()
{
	if (m_pFont)
	{
		delete m_pFont;
		m_pFont = NULL;
	}
}

//控件名字 必须唯一
CString CSkinUIControl::GetName() const
{
	return m_strName;
}

void CSkinUIControl::SetName(LPCTSTR pszName)
{
	m_strName = pszName;
}

//类名 根据这个来分类控件 比如"Button" "CheckBox"等
LPCTSTR CSkinUIControl::GetClass() const
{
	return	TEXT("SkinUIControl");
}

// 文本相关
CString CSkinUIControl::GetText() const
{
	return m_strText;
}

void CSkinUIControl::SetText(LPCTSTR pszText)
{
	m_strText = pszText;
}

void CSkinUIControl::SetFont(CFont * Font)
{
	m_pFont = Font;
}
CFont * CSkinUIControl::GetFont() const
{
	return m_pFont;
}

//DrawText的最后一个参数的格式
void CSkinUIControl::SetTextFormat(UINT uFormat)
{
	m_uTextFormat = uFormat;
}

// 位置相关
const CRect& CSkinUIControl::GetPos() const
{
	return m_rcItem;
}

void CSkinUIControl::SetPos(const CRect & rc)
{
	m_rcItem = rc;
	m_Rgn.SetRectRgn(rc);
}

void CSkinUIControl::SetPos(int x, int y, int cx, int cy)
{
	m_rcItem.left = x;
	m_rcItem.top = y;
	m_rcItem.right = m_rcItem.left + cx;
	m_rcItem.bottom = m_rcItem.top + cy;
	m_Rgn.SetRectRgn(&m_rcItem);
}

void CSkinUIControl::SetRgn(CRgn & rgn)
{
	m_Rgn.CopyRgn(&rgn);
}

int CSkinUIControl::GetWidth() const
{
	return m_rcItem.Width();
}

int CSkinUIControl::GetHeight() const
{
	return m_rcItem.Height();
}

int CSkinUIControl::GetX() const
{
	return m_rcItem.left;
}

int CSkinUIControl::GetY() const
{
	return m_rcItem.top;
}

COLORREF CSkinUIControl::GetBkColor() const
{
	return m_crBk;
}

void CSkinUIControl::SetBkColor(COLORREF crBk)
{
	m_crBk = crBk;
}

// 鼠标提示
CString CSkinUIControl::GetToolTip() const
{
	return m_strToolTip;
}

void CSkinUIControl::SetToolTip(LPCTSTR pszText)
{
	m_strToolTip = pszText;
}

// 一些重要的属性
bool CSkinUIControl::IsVisible() const
{
	return m_bVisible;
}

void CSkinUIControl::SetVisible(bool bVisible)
{
	m_bVisible = bVisible;
}

bool CSkinUIControl::IsEnabled() const
{
	return m_bEnabled;
}

void CSkinUIControl::SetEnabled(bool bEnable)
{
	m_bEnabled = bEnable;
}

//绘画
void CSkinUIControl::DoPaint(CDC * pDC)
{
	// 绘制循序:背景颜色->背景图->状态图->文本
	PaintBkColor(pDC);
	PaintBkImage(pDC);
	PaintStatusImage(pDC);
	PaintText(pDC);

#ifdef _DEBUG
	//画个框框 测试用的
	//pDC->Draw3dRect(&m_rcItem, RGB(0,0,0), RGB(0,0,0));
#endif
}

void CSkinUIControl::PaintBkColor(CDC * pDC)
{

}

void CSkinUIControl::PaintBkImage(CDC * pDC)
{

}

void CSkinUIControl::PaintStatusImage(CDC * pDC)
{

}

void CSkinUIControl::PaintText(CDC * pDC)
{

}

//操作相关
void CSkinUIControl::MouseMove(const CPoint & point)
{

}

void CSkinUIControl::MouseLeave()
{

}

void CSkinUIControl::MouseLButtonDown(const CPoint & point)
{

}

void CSkinUIControl::MouseLButtonUp(const CPoint & point)
{

}

void CSkinUIControl::MouseRButtonDown(const CPoint & point)
{

}

void CSkinUIControl::MouseRButtonUp(const CPoint & point)
{

}

BOOL CSkinUIControl::MouseCursor(const CPoint & point)
{
	return FALSE;
}

void CSkinUIControl::UpdateControl()
{
	if (m_pParentWnd)
	{
		m_pParentWnd->InvalidateRect(&m_rcItem, FALSE);
	}
}

//创建控件
bool CSkinUIControl::CreateControl(LPCTSTR pszName, CSkinUIWnd * pParentWnd, const RECT & rc, LPCTSTR pszText, bool bVisible)
{
	m_strName = pszName;
	m_pParentWnd = pParentWnd;
	m_rcItem = rc;
	m_strText = pszText;
	m_bVisible = bVisible;
	m_Rgn.SetRectRgn(m_rcItem);

	return true;
}